home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / BLANKIT.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-30  |  2KB  |  79 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 344 of 422
  3. From : David Drzyzga                       1:3612/220.0         05 Jun 93  06:53
  4. To   : Josh Whitt                          1:2260/170.0
  5. Subj : tsr's
  6. ────────────────────────────────────────────────────────────────────────────────
  7.  TS> terminate your program and stay resident.
  8.  JW> I have looked at it, but that's all it does - I need a way to intercept a
  9.  JW> JW> key-press for a TSR notepad I'm writing.  Maybe this is what I should
  10.  JW> JW> have asked about?
  11.  
  12. Here's a small scrreen blanker program. Notes: It will not run correctly in
  13. Hercules or DESQview. Maybe not in mono either, but it does show how to
  14. redefine the keyboard and timer interrupts.  Basically the program will swap
  15. video pages if there is keyboard inactivity for 5 minutes or the amount of time
  16. specified on the command line ( >0 and <11 ).}
  17.  
  18. {$M 2000,0,0}
  19. {$R-,S-,I-,D+,F+,V-,B-,N-,L+}
  20. program blankit;
  21.  
  22. uses
  23.   dos;
  24.  
  25. const
  26.   TimerInt    : byte = $08;
  27.   KbdInt      : byte = $09;
  28.   TimeLimit   : word = 5460;
  29.  
  30. var
  31.   Regs        : registers;
  32.   Cnt         : word;
  33.   OldKbdVec   : pointer;
  34.   OldTimerVec : pointer;
  35.   Time        : real;
  36.   Code        : word;
  37.  
  38. procedure calloldint(sub:pointer);
  39. begin
  40.   inline($9C/$FF/$5E/$06);
  41. end;
  42.  
  43. procedure keyboard(flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word); interrupt;
  44.  
  45. begin
  46.   calloldint(oldkbdvec);
  47.   if cnt >= timelimit then begin
  48.     regs.ax := $0500;
  49.     intr($10,regs);
  50.   end;
  51.   cnt := 0;
  52.   inline($FB);
  53. end;
  54.  
  55. procedure clock(flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp : word); interrupt;
  56. begin
  57.   calloldint(oldtimervec);
  58.   if cnt >= timelimit then begin
  59.     regs.ax := $0501;
  60.     intr($10,regs);
  61.   end
  62.   else
  63.     inc(cnt,1);
  64.   inline($FB);
  65. end;
  66.  
  67. begin
  68.   if paramcount = 1 then begin
  69.     val(paramstr(1),time,code);
  70.     if (code=0) and (time>0) and (time <11) then
  71.       timelimit := trunc(time*18.2*60);
  72.   end;
  73.   getintvec(kbdint,oldkbdvec);
  74.   getintvec(timerint,oldtimervec);
  75.   setintvec(timerint,@clock);
  76.   setintvec(kbdint,@keyboard);
  77.   cnt := 0;
  78.   keep(0);
  79. end.